// ts 定义变量 做类型标记  基本数据类型string number boolean null undefined 
/* 
let a: number = 10;
a = '哈哈';
console.log(a)

*/
// let isShow: boolean = true;
// isShow = 10;

// any任意类型，尽量不使用
/*
let a:any = 10;
a = '你好';
a = true;
console.log(a);
*/

/*
unknown 类型 代表未知类型，可以给这个变量赋任何类型值，使用任何api都会报错

使用场景：
  当我们使用一个变量，使用时 还不知道 赋值为什么数据类型，暂定一个类型，使用api 报错问题，提示开发者，这个类型是 未知，如果你
  现在确定了类型，抓紧改成正确的类型
*/

// const a: unknown = [1,2,3];
// a.push(111)


/*
  never 类型 代表一个永远不存在的值， 可以赋任何值，任何值都会报错
  使用场景：
    某些时候， 需要使用一个变量，但是这个变量 在未来，一定要删除，否则会出现问题，不管赋值为什么类型，一直提示报错
    为了 未来提示 开发者，如果在变量不用了，抓紧删除
*/

// const a:never = 'aaa';
// console.log(a);


// void 类型 标记函数的返回值的类型为空
// function fn(a: number): void{
//   console.log(a);
//   return true;
// }
// fn(10)

/*
// 数组 
// 标记数组类型 1 语法糖
const arr: number[] = [1,2,3,4];

// 使用泛型标记类型
const arr2: Array<number> = [1,2,3,4];
// ts数组 每个值 类型都是固定的
*/

// 元组类型  理解为这是一个特殊的数组 数组中的每个值类型可以不一样

// 定义好标记有几个值  每个值的类型是什么 
const tuple: [number, string] = [18, 'lin']; 
// 可以中途push 值必须是 number或者string中的一种
tuple.push(10);
